home *** CD-ROM | disk | FTP | other *** search
/ Deutsche Edition 1 / Deutsche Edition 1.iso / amok / amok_lha / amok10.lha / SuperLists1.3 / SuperLists.def next >
Text File  |  1993-08-15  |  7KB  |  179 lines

  1. (**********************************************************************
  2.  
  3.     :Program.       SuperLists.def
  4.     :Contents.     Text-list Playfield handler
  5.     :Author.        Nicolas Benezan [bne]
  6.     :Address.    Postwiesenstr. 2, D7000 Stuttgart 60
  7.     :Phone.      711/333679
  8.     :Copyright.  Public Domain (siehe ReadMe)
  9.     :Language.      Modula-II
  10.     :Translator. M2Amiga AMSoft
  11.     :History.    V1.0b [bne] 28.05.88 (first PD-version Amok#2)
  12.     :History.    V1.1a [bne] 10.06.88 (extended MemHandler)
  13.     :History.     + VAR AllocProc, DeallocProc
  14.     :History.    V1.2b [bne] 20.07.88 ("FreeVert-only" also available)
  15.     :History.     + CONST first, last
  16.     :History.    V1.3a [bne] 14.08.88 (+ MakeExtEntry, ClearList)
  17.     
  18. **********************************************************************)
  19.  
  20. DEFINITION MODULE SuperLists;
  21.  
  22. FROM Exec    IMPORT Node,List,NodePtr,Byte;
  23. FROM Intuition    IMPORT GadgetPtr,WindowPtr,RequesterPtr;
  24. FROM Graphics    IMPORT DrawModeSet,RastPortPtr;
  25. FROM SYSTEM    IMPORT ADDRESS,BITSET;
  26.  
  27. CONST    oldList=FALSE;    (* RethinkList *)
  28.     newList=TRUE;
  29.         
  30.         hideIt=TRUE;    (* InsertEntry, RemoveEntry *)
  31.         showIt=FALSE;
  32.         
  33.         deallocIt=TRUE;    (* RemoveEntry *)
  34.         letIt=FALSE;
  35.         
  36.         first=0;    (* InsertEntry, RemoveEntry *)
  37.         last=-1;
  38.  
  39. TYPE    SuperListPtr=POINTER TO SuperList;
  40.         EntryPtr=POINTER TO Entry;
  41.         ExtEntryPtr=ADDRESS; (* POINTER TO RECORD MinEntry; UserData... END *)
  42.         AnyEntryPtr=ADDRESS; (* EntryPtr or ExtEntryPtr *)
  43.     SuperList=RECORD
  44.       list        :List;
  45.           rastPort    :RastPortPtr;
  46.           backPen    :INTEGER;
  47.           propX,
  48.           propY        :GadgetPtr;
  49.           leftEdge,
  50.           topEdge,
  51.           width,
  52.           height,
  53.           FontXsize,
  54.           FontYsize,
  55.           FontBaseLine,
  56.           dispRow,
  57.           dispColumn,
  58.           rows,
  59.           columns    :INTEGER;
  60.           topEntry,
  61.           bottomEntry    :NodePtr;
  62.           effWidth,
  63.           effHeight    :INTEGER;
  64.         END;
  65.         MinEntry=RECORD
  66.           node        :Node;
  67.           frontPen,
  68.           backPen    :Byte;
  69.           drawMode    :DrawModeSet;
  70.         END;
  71.         Entry=RECORD
  72.           node        :Node;
  73.           frontPen,
  74.           backPen    :Byte;
  75.           drawMode    :DrawModeSet;
  76.           userData    :LONGINT;
  77.           userFlags    :BITSET;
  78.         END;
  79.         Directions=(Up,Down,Left,Right);
  80.         AllocProcType=PROCEDURE(VAR ADDRESS,LONGINT);
  81.         DeallocProcType=PROCEDURE(VAR ADDRESS);
  82.  
  83. VAR    AllocProc:AllocProcType;
  84.     DeallocProc:DeallocProcType;
  85.  
  86. PROCEDURE RethinkList(List:SuperListPtr;New:BOOLEAN);
  87. (*:Note.    See documentation for a complete description *)
  88.  
  89. PROCEDURE RefreshList(List:SuperListPtr);
  90. (*:Input.    List: Pointer to a SuperList structure
  91.   :Semantic.    Refreshes the display of the List *)
  92.  
  93. PROCEDURE RedrawEntry(List:SuperListPtr;Row:INTEGER);
  94. (*:Input.    List: Pointer to a SuperList structure
  95.   :Input.    Row: Number of the entry to be redrawn
  96.   :Semantic.    Rewrites an entry on the display *)
  97.  
  98. PROCEDURE ScrollList(List:SuperListPtr;Dir:Directions);
  99. (*:Input.    List: Pointer to a SuperList structure
  100.   :Input.    Dir: The scrolling direction
  101.   :Semantic.    Scrolls the list one character in the given direction
  102. *)
  103.  
  104. PROCEDURE MakeEntry(text:ADDRESS;APen,BPen:INTEGER;
  105.     Mode:DrawModeSet):EntryPtr;
  106. (*:Input.    text: Pointer to a Text
  107.   :Input.    APen,BPen: Foreground and background color
  108.   :Input.    Mode: Draw mode, jam1 jam2 or complement
  109.   :Semantic.    Allocates and initialises a new Entry structure *)
  110.  
  111. PROCEDURE MakeExtEntry(text:ADDRESS;APen,BPen:INTEGER;
  112.     Mode:DrawModeSet;Size:CARDINAL):ExtEntryPtr;
  113. (*:Input.    text: Pointer to a Text
  114.   :Input.    APen,BPen: Foreground and background color
  115.   :Input.    Mode: Draw mode, jam1 jam2 or complement
  116.   :Input.    Size: Size of the complete entry structure
  117.   :Input.    including the MinEntry RECORD
  118.   :Semantic.    Allocates and initialises a new ExtEntry structure *)
  119.  
  120. PROCEDURE InsertEntry(List:SuperListPtr;entry:AnyEntryPtr;Row:INTEGER;
  121.     hidden:BOOLEAN);
  122. (*:Input.    List: Pointer to an initialised SuperList structure
  123.   :Input.    entry: Pointer to the entry to be inserted
  124.   :Input.    Row: At this position the new entry is inserted
  125.   :Input.    hidden: TRUE: insertion is hidden FALSE: insertion
  126.   :Input.    is displayed
  127.   :Semantic.    Inserts a new entry into a SuperList *)
  128.  
  129. PROCEDURE RemoveEntry(List:SuperListPtr;Row:INTEGER;VAR mustRethink:
  130.     BOOLEAN;hidden,Dealloc:BOOLEAN);
  131. (*:Input.    List: Pointer to an initialised SuperList structure
  132.   :Input.    Row: The entry with this number is removed
  133.   :Input.    mustRethink: Result of a previous call to RemoveList()
  134.   :Input.    or FALSE for the first call
  135.   :Result.    mustRethink: TRUE: the removed entry was the longest
  136.   :Result.    and RethinkList() must be called
  137.   :Input.    hidden: TRUE: removal is hidden FALSE: removal
  138.   :Input.    is displayed 
  139.   :Input.    Dealloc: TRUE: entry will be deallocated
  140.   :Note.    If this flag is set and the Entry was not created by
  141.   :Note.    MakeEntry() or MakeExtEntry() the system might crash
  142.   :Semantic.    Removes an entry out of a SuperList *)
  143.  
  144. PROCEDURE GetEntry(List:SuperListPtr;Row:INTEGER):AnyEntryPtr;
  145. (*:Input.    List: Pointer to an initialised SuperList structure
  146.   :Input.    Row: Number of the Entry to be searched
  147.   :Result.    Pointer to the searched Entry or NIL if such
  148.   :Result.    an Entry does not exist *)
  149.  
  150. PROCEDURE ClickRow(List:SuperListPtr;mouseX,mouseY:INTEGER):INTEGER;
  151. (*:Input.    List: Pointer to an initialised SuperList structure
  152.   :Input.    mouseX,mouseY: Mouse pointer coordinates relative to
  153.   :Input.    the RastPort containing the SuperList.
  154.   :Result.    Number of the clicked row or -1 if the Pointer was
  155.   :Result.    out of the List's display area *)
  156.  
  157. PROCEDURE GetProp(List:SuperListPtr);
  158. (*:Input.    List: Pointer to an initialised SuperList structure
  159.   :Semantic.    Reads the proportional gadgets and sets the
  160.   :Semantic.    List's internal values
  161.   :Note.    Call RethinkList and RefreshList afer calling this *)
  162.  
  163. PROCEDURE SetProp(List:SuperListPtr;Window:WindowPtr;Requester:
  164.     RequesterPtr);
  165. (*:Input.    List: Pointer to an initialised SuperList structure
  166.   :Input.    Window: Pointer to the window containing the SuperList
  167.   :Input.    Requester: Pointer to the requester containing the
  168.   :Input.    SuperList or NIL
  169.   :Semantic.    Refreshes the SuperList's proportional gadgets *)
  170.  
  171. PROCEDURE ClearList(List:SuperListPtr;hidden:BOOLEAN);
  172. (*:Input.    List: Pointer to an initialised SuperList structure
  173.   :Input.    hidden: TRUE: clearing hidden FALSE: clear list and display
  174.   :Semantic.    Removes and deallocates all entries of a SuperList
  175.   :Note.    All entries must have been allocated by MakeEntry() or
  176.   :Note.    MakeExtEntry(). Otherwise serious problems will arise ! *)
  177.  
  178. END SuperLists.
  179.